{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     编程语言          编号   推出时间    价格                       主要创始人\n",
      "0    java  1995010302  1995年  45.6               James Gosling\n",
      "1  python  1991110502  1991年  67.0            Guido van Rossum\n",
      "2       C  1972021222  1972年  33.9  Dennis MacAlistair Ritchie\n",
      "3      js  1995040903  1995年  59.5                Brendan Eich\n",
      "4     php  2012092312  2012年  69.9              Rasmus Lerdorf\n",
      "5     C++  1983070316  1983年  75.0           Bjarne Stroustrup\n",
      "           编号   推出时间  月平均销售数量 主要销售区域\n",
      "0  1995010302  1995年      134     成都\n",
      "1  1991110506  2006年      231     北京\n",
      "2  1972021222  1972年       67     天津\n",
      "3  1995040903  1995年      199     上海\n",
      "4  2012092313  2013年       23     深圳\n",
      "5  1983070316  1983年      323     合肥\n"
     ]
    }
   ],
   "source": [
    "# 导入pandas包\n",
    "import pandas as pd\n",
    "data_path_01=\"merge1.txt\"\n",
    "data_path_02=\"merge2.txt\"\n",
    "\n",
    "# 解析数据\n",
    "data_01 = pd.read_csv(data_path_01,sep=\",\",engine='python')\n",
    "data_02 = pd.read_csv(data_path_02,sep=\",\",engine='python')\n",
    "print(data_01)\n",
    "print(data_02)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   编程语言          编号   推出时间    价格                       主要创始人  月平均销售数量 主要销售区域\n",
      "0  java  1995010302  1995年  45.6               James Gosling      134     成都\n",
      "1     C  1972021222  1972年  33.9  Dennis MacAlistair Ritchie       67     天津\n",
      "2    js  1995040903  1995年  59.5                Brendan Eich      199     上海\n",
      "3   C++  1983070316  1983年  75.0           Bjarne Stroustrup      323     合肥\n"
     ]
    }
   ],
   "source": [
    "# merge 函数，内连接 提取相同列 数据行合并\n",
    "data_res=pd.merge(data_01,data_02,how=\"inner\")\n",
    "print(data_res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     编程语言          编号   推出时间    价格                       主要创始人  月平均销售数量 主要销售区域\n",
      "0    java  1995010302  1995年  45.6               James Gosling    134.0     成都\n",
      "1  python  1991110502  1991年  67.0            Guido van Rossum      NaN    NaN\n",
      "2       C  1972021222  1972年  33.9  Dennis MacAlistair Ritchie     67.0     天津\n",
      "3      js  1995040903  1995年  59.5                Brendan Eich    199.0     上海\n",
      "4     php  2012092312  2012年  69.9              Rasmus Lerdorf      NaN    NaN\n",
      "5     C++  1983070316  1983年  75.0           Bjarne Stroustrup    323.0     合肥\n"
     ]
    }
   ],
   "source": [
    "# merge 函数，左连接，按左边的数据对其，右侧新数据合并的填充NaN\n",
    "data_res=pd.merge(data_01,data_02,how=\"left\")\n",
    "print(data_res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   编程语言          编号   推出时间    价格                       主要创始人  月平均销售数量 主要销售区域\n",
      "0  java  1995010302  1995年  45.6               James Gosling      134     成都\n",
      "1   NaN  1991110506  2006年   NaN                         NaN      231     北京\n",
      "2     C  1972021222  1972年  33.9  Dennis MacAlistair Ritchie       67     天津\n",
      "3    js  1995040903  1995年  59.5                Brendan Eich      199     上海\n",
      "4   NaN  2012092313  2013年   NaN                         NaN       23     深圳\n",
      "5   C++  1983070316  1983年  75.0           Bjarne Stroustrup      323     合肥\n"
     ]
    }
   ],
   "source": [
    "# merge 函数，右连接，按右边的数据对其，左侧数据合并的填充NaN\n",
    "data_res=pd.merge(data_01,data_02,how=\"right\")\n",
    "print(data_res)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     编程语言          编号   推出时间    价格                       主要创始人  月平均销售数量 主要销售区域\n",
      "0    java  1995010302  1995年  45.6               James Gosling    134.0     成都\n",
      "1  python  1991110502  1991年  67.0            Guido van Rossum      NaN    NaN\n",
      "2       C  1972021222  1972年  33.9  Dennis MacAlistair Ritchie     67.0     天津\n",
      "3      js  1995040903  1995年  59.5                Brendan Eich    199.0     上海\n",
      "4     php  2012092312  2012年  69.9              Rasmus Lerdorf      NaN    NaN\n",
      "5     C++  1983070316  1983年  75.0           Bjarne Stroustrup    323.0     合肥\n",
      "6     NaN  1991110506  2006年   NaN                         NaN    231.0     北京\n",
      "7     NaN  2012092313  2013年   NaN                         NaN     23.0     深圳\n"
     ]
    }
   ],
   "source": [
    "# merge 函数，外连接，左右数据合并，对不上的用NaN填充\n",
    "data_res=pd.merge(data_01,data_02,how=\"outer\")\n",
    "print(data_res)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Contact（） 多个数据集的合并\n",
    "- pd.concat(objs, axis='0', join:'outer', ignore_index: 'False', keys='None', levels='None', names='None', verify_integrity: 'False', sort: 'False', copy:'True') \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     编程语言   推出时间    价格\n",
      "0    java  1995年  45.6\n",
      "1  python  1991年  67.0\n",
      "2       C  1972年  33.9\n",
      "3      js  1995年  59.5\n",
      "4     php  2012年  69.9\n",
      "5     C++  1983年  75.0\n",
      "    推出时间  月平均销售数量 主要销售区域\n",
      "0  1995年      134     成都\n",
      "1  2006年      231     北京\n",
      "2  1972年       67     天津\n",
      "    推出时间  月份 发行地点\n",
      "0  1995年  12   广州\n",
      "1  2006年   2   上海\n",
      "2  1972年   4   南京\n",
      "3  2017年   5   北京\n"
     ]
    }
   ],
   "source": [
    "# 导入pandas包\n",
    "import pandas as pd\n",
    "import numpy as np \n",
    "\n",
    "data={'bookname':['python入门','python编程','python实战'],\n",
    "          'author':['Eric','张健','刘辉'],\n",
    "          'price':['49.9','36.5','67.4']}\n",
    "\n",
    "\n",
    "data_03 = pd.DataFrame(    {\n",
    "        '编程语言':['java','python','C','js','php','C++'],\n",
    "        '推出时间':['1995年','1991年','1972年','1995年','2012年','1983年'],\n",
    "        '价格':[45.6,67.0,33.9,59.5,69.9,75.0]\n",
    "    })\n",
    "print(data_03)\n",
    "data_04 = pd.DataFrame(    {\n",
    "        '推出时间':['1995年','2006年','1972年'],\n",
    "        '月平均销售数量':[134,231,67],\n",
    "        '主要销售区域':['成都','北京','天津']\n",
    "    })\n",
    "print(data_04)\n",
    "data_05 = pd.DataFrame(    {\n",
    "        '推出时间':['1995年','2006年','1972年','2017年'],\n",
    "        '月份':[12,2,4,5],\n",
    "        '发行地点':['广州','上海','南京','北京']\n",
    "    })\n",
    "print(data_05)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     编程语言   推出时间    价格  月平均销售数量 主要销售区域    月份 发行地点\n",
      "0    java  1995年  45.6      NaN    NaN   NaN  NaN\n",
      "1  python  1991年  67.0      NaN    NaN   NaN  NaN\n",
      "2       C  1972年  33.9      NaN    NaN   NaN  NaN\n",
      "3      js  1995年  59.5      NaN    NaN   NaN  NaN\n",
      "4     php  2012年  69.9      NaN    NaN   NaN  NaN\n",
      "5     C++  1983年  75.0      NaN    NaN   NaN  NaN\n",
      "0     NaN  1995年   NaN    134.0     成都   NaN  NaN\n",
      "1     NaN  2006年   NaN    231.0     北京   NaN  NaN\n",
      "2     NaN  1972年   NaN     67.0     天津   NaN  NaN\n",
      "0     NaN  1995年   NaN      NaN    NaN  12.0   广州\n",
      "1     NaN  2006年   NaN      NaN    NaN   2.0   上海\n",
      "2     NaN  1972年   NaN      NaN    NaN   4.0   南京\n",
      "3     NaN  2017年   NaN      NaN    NaN   5.0   北京\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 13 entries, 0 to 3\n",
      "Data columns (total 7 columns):\n",
      " #   Column   Non-Null Count  Dtype  \n",
      "---  ------   --------------  -----  \n",
      " 0   编程语言     6 non-null      object \n",
      " 1   推出时间     13 non-null     object \n",
      " 2   价格       6 non-null      float64\n",
      " 3   月平均销售数量  3 non-null      float64\n",
      " 4   主要销售区域   3 non-null      object \n",
      " 5   月份       4 non-null      float64\n",
      " 6   发行地点     4 non-null      object \n",
      "dtypes: float64(3), object(4)\n",
      "memory usage: 832.0+ bytes\n",
      "None\n"
     ]
    }
   ],
   "source": [
    "# concat 函数，axis=0 是纵向上按行合并。\n",
    "data_res=pd.concat([data_03,data_04,data_05],axis=0)\n",
    "print(data_res)\n",
    "print(data_res.info())\n",
    "# 输出解析：通过设置 axis=0 在纵向上合并数据，总的行数据量是3个数据集的总和，扩充了行数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     编程语言   推出时间    价格   推出时间  月平均销售数量 主要销售区域   推出时间  月份 发行地点\n",
      "0    java  1995年  45.6  1995年      134     成都  1995年  12   广州\n",
      "1  python  1991年  67.0  2006年      231     北京  2006年   2   上海\n",
      "2       C  1972年  33.9  1972年       67     天津  1972年   4   南京\n"
     ]
    }
   ],
   "source": [
    "\n",
    "# concat 函数，axis=1,join=\"inner\" ，根据索引 取交集 0-2索引\n",
    "data_res=pd.concat([data_03,data_04,data_05],axis=1,join=\"inner\")\n",
    "print(data_res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    推出时间\n",
      "0  1995年\n",
      "1  1991年\n",
      "2  1972年\n",
      "3  1995年\n",
      "4  2012年\n",
      "5  1983年\n",
      "0  1995年\n",
      "1  2006年\n",
      "2  1972年\n",
      "0  1995年\n",
      "1  2006年\n",
      "2  1972年\n",
      "3  2017年\n"
     ]
    }
   ],
   "source": [
    "# concat 函数，axis=0,join=\"inner\" , 交集\n",
    "data_res=pd.concat([data_03,data_04,data_05],axis=0,join=\"inner\")\n",
    "print(data_res)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## groubby 分组 聚合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   编程语言 技术方向   推出时间  年均销售数量    价格                       主要创始人\n",
      "0  java   后端  1995年     230  45.6                JamesGosling\n",
      "1  HTML   前端  1990年     124  55.3           Daniel W Connolly\n",
      "2     C   后端  1972年      35  33.9  Dennis MacAlistair Ritchie\n",
      "3    js   前端  1995年     678  59.5                Brendan Eich\n",
      "4   C++   后端  1983年     125  75.0           Bjarne Stroustrup\n",
      "5   CSS   前端  1990年     254  24.6             Tim Berners-Lee\n"
     ]
    }
   ],
   "source": [
    "# 导入pandas包\n",
    "import pandas as pd\n",
    "data_path=\"groupby.txt\"\n",
    "# 解析数据\n",
    "data = pd.read_csv(data_path,sep=',',engine='python')\n",
    "print(data)\n",
    "# --- 输出结果 ---"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.1"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "d6ee8951ea1f1e54d5c6db37d467cbab5e82ba9505f1ada5124c3f7e97e9c192"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
